import request from '@/utils/request'

export interface PostQuery {
  page?: number
  size?: number
  categoryId?: number
  tagId?: number
  userId?: number
  keyword?: string
  orderBy?: string
}

export interface PostData {
  title: string
  content: string
  categoryId: number
  summary?: string
  coverImage?: string
  tags?: string[]
}

export interface Post {
  id?: number
  title: string
  content: string
  userId: number
  username?: string
  categoryId?: number
  categoryName?: string
  views?: number
  likes?: number
  comments?: number
  createTime?: string
  updateTime?: string
  tags?: string[]
  isTop?: boolean
  isEssence?: boolean
  status?: number
}

export interface Category {
  id: number
  name: string
  description?: string
  sort?: number
  createTime?: string
  updateTime?: string
}

export interface Tag {
  id: number
  name: string
  postCount?: number
}

// 帖子列表查询参数
export interface PostQueryParams {
  pageNum?: number
  pageSize?: number
  categoryId?: number
  userId?: number
  keyword?: string
  orderBy?: string
  tags?: string[]
}

// 基础路径
const baseUrl = '/api/post'

/**
 * 获取帖子列表
 * @param params 查询参数
 * @returns 帖子列表
 */
export function getPosts(params: PostQueryParams) {
  // 如果有特定查询参数，则使用特定接口
  if (params.categoryId) {
    return request({
      url: `${baseUrl}/post/category/${params.categoryId}`,
      method: 'get',
      params: {
        pageNum: params.pageNum,
        pageSize: params.pageSize,
        orderBy: params.orderBy
      }
    })
  } else if (params.userId) {
    return request({
      url: `${baseUrl}/post/user/${params.userId}`,
      method: 'get',
      params: {
        pageNum: params.pageNum,
        pageSize: params.pageSize,
        orderBy: params.orderBy
      }
    })
  } else {
    // 默认使用最新帖子接口
    return request({
      url: `${baseUrl}/home/latest-posts`,
      method: 'get',
      params: {
        pageNum: params.pageNum,
        pageSize: params.pageSize
      }
    })
  }
}

/**
 * 获取帖子详情
 * @param id 帖子ID
 * @returns 帖子详情
 */
export function getPostDetail(id: number) {
  return request({
    url: `${baseUrl}/post/${id}`,
    method: 'get'
  })
}

/**
 * 获取帖子详情（别名，向后兼容）
 * @param id 帖子ID
 * @returns 帖子详情
 */
export function getPostById(id: number) {
  return getPostDetail(id)
}

/**
 * 创建帖子
 * @param data 帖子数据
 * @returns 创建结果
 */
export function createPost(data: Post) {
  return request({
    url: `${baseUrl}/post/create`,
    method: 'post',
    data
  })
}

/**
 * 更新帖子
 * @param data 帖子数据
 * @returns 更新结果
 */
export function updatePost(data: Post) {
  return request({
    url: `${baseUrl}/post/${data.id}`,
    method: 'put',
    data
  })
}

/**
 * 删除帖子
 * @param id 帖子ID
 * @returns 删除结果
 */
export function deletePost(id: number) {
  return request({
    url: `${baseUrl}/post/${id}`,
    method: 'delete'
  })
}

/**
 * 获取分类列表
 * @returns 分类列表
 */
export function getCategories() {
  return request({
    url: `${baseUrl}/categories`,
    method: 'get'
  })
}

/**
 * 获取标签列表
 * @returns 标签列表
 */
export function getTags() {
  return request({
    url: `${baseUrl}/tags`,
    method: 'get'
  })
}

// 上传图片
export function uploadImage(data: FormData) {
  return request({
    url: `${baseUrl}/post/upload/image`,
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    data
  })
}

/**
 * 点赞帖子
 * @param id 帖子ID
 * @param userId 用户ID
 * @returns 点赞结果 true-点赞成功 false-取消点赞
 */
export function likePost(id: number, userId?: number) {
  return request({
    url: `${baseUrl}/post/${id}/like`,
    method: 'post',
    params: { userId }
  })
}

/**
 * 获取帖子点赞状态
 * @param id 帖子ID
 * @param userId 用户ID
 * @returns 是否已点赞
 */
export function getPostLikeStatus(id: number, userId?: number) {
  return request({
    url: `${baseUrl}/post/${id}/like/status`,
    method: 'get',
    params: { userId }
  })
}

/**
 * 收藏帖子
 * @param id 帖子ID
 * @param userId 用户ID
 * @returns 收藏结果 true-收藏成功 false-收藏失败
 */
export function favoritePost(id: number, userId?: number) {
  return request({
    url: `${baseUrl}/post/${id}/favorite`,
    method: 'post',
    params: { userId }
  })
}

/**
 * 取消收藏帖子
 * @param id 帖子ID
 * @param userId 用户ID
 * @returns 取消结果 true-取消成功 false-取消失败
 */
export function unfavoritePost(id: number, userId?: number) {
  return request({
    url: `${baseUrl}/post/${id}/favorite`,
    method: 'delete',
    params: { userId }
  })
}

/**
 * 获取帖子收藏状态
 * @param id 帖子ID
 * @param userId 用户ID
 * @returns 是否已收藏
 */
export function getPostFavoriteStatus(id: number, userId?: number) {
  return request({
    url: `${baseUrl}/post/${id}/favorite/status`,
    method: 'get',
    params: { userId }
  })
}

/**
 * 获取用户发布的帖子
 * @param userId 用户ID
 * @param params 查询参数
 * @returns 用户帖子列表
 */
export function getUserPosts(userId: number, params?: PostQueryParams) {
  return request({
    url: `${baseUrl}/post/user/${userId}`,
    method: 'get',
    params
  })
}

/**
 * 获取用户帖子数量
 * @param userId 用户ID
 * @returns 帖子数量
 */
export function getPostCountByUserId(userId: number) {
  return request({
    url: `${baseUrl}/post/count/user/${userId}`,
    method: 'get'
  })
}

/**
 * 获取用户的收藏帖子列表
 * @param userId 用户ID
 * @returns 收藏的帖子列表
 */
export function getUserFavorites(userId: number) {
  return request({
    url: `${baseUrl}/user/${userId}/favorites`,
    method: 'get'
  })
} 